home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / codeco1a / frmaddin.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1999-06-26  |  30.1 KB  |  876 lines

  1. VERSION 5.00
  2. Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
  3. Begin VB.Form frmAddIn 
  4.    BorderStyle     =   3  'Fester Dialog
  5.    Caption         =   "Code Completer"
  6.    ClientHeight    =   3600
  7.    ClientLeft      =   2175
  8.    ClientTop       =   2220
  9.    ClientWidth     =   6030
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    MinButton       =   0   'False
  13.    ScaleHeight     =   3600
  14.    ScaleWidth      =   6030
  15.    ShowInTaskbar   =   0   'False
  16.    StartUpPosition =   2  'Bildschirmmitte
  17.    Begin VB.CheckBox chkBottom 
  18.       Caption         =   "Bottom"
  19.       Height          =   375
  20.       Left            =   3960
  21.       TabIndex        =   8
  22.       Top             =   420
  23.       Width           =   795
  24.    End
  25.    Begin VB.CheckBox chkTop 
  26.       Caption         =   "Top"
  27.       Height          =   375
  28.       Left            =   3960
  29.       TabIndex        =   7
  30.       Top             =   0
  31.       Width           =   795
  32.    End
  33.    Begin VB.TextBox txtModErrHandling 
  34.       Height          =   555
  35.       Left            =   0
  36.       MultiLine       =   -1  'True
  37.       TabIndex        =   6
  38.       Text            =   "frmAddIn.frx":0000
  39.       Top             =   3000
  40.       Width           =   6015
  41.    End
  42.    Begin VB.TextBox txtBottom 
  43.       Height          =   1035
  44.       Left            =   3960
  45.       MultiLine       =   -1  'True
  46.       TabIndex        =   5
  47.       Text            =   "frmAddIn.frx":04A4
  48.       Top             =   1920
  49.       Width           =   2055
  50.    End
  51.    Begin VB.TextBox txtTop 
  52.       Height          =   1035
  53.       Left            =   3960
  54.       MultiLine       =   -1  'True
  55.       TabIndex        =   4
  56.       Text            =   "frmAddIn.frx":04AA
  57.       Top             =   840
  58.       Width           =   2055
  59.    End
  60.    Begin VB.TextBox txtCode 
  61.       Height          =   2955
  62.       Left            =   1800
  63.       MultiLine       =   -1  'True
  64.       TabIndex        =   3
  65.       Text            =   "frmAddIn.frx":04B0
  66.       Top             =   0
  67.       Width           =   2115
  68.    End
  69.    Begin MSComctlLib.TreeView tvComponents 
  70.       Height          =   2955
  71.       Left            =   0
  72.       TabIndex        =   2
  73.       Top             =   0
  74.       Width           =   1755
  75.       _ExtentX        =   3096
  76.       _ExtentY        =   5212
  77.       _Version        =   393217
  78.       Indentation     =   584
  79.       Style           =   7
  80.       Checkboxes      =   -1  'True
  81.       Appearance      =   1
  82.    End
  83.    Begin VB.CommandButton CancelButton 
  84.       Caption         =   "&Abbrechen"
  85.       Height          =   375
  86.       Left            =   4800
  87.       TabIndex        =   1
  88.       Top             =   420
  89.       Width           =   1215
  90.    End
  91.    Begin VB.CommandButton OKButton 
  92.       Caption         =   "&OK"
  93.       Height          =   375
  94.       Left            =   4800
  95.       TabIndex        =   0
  96.       Top             =   0
  97.       Width           =   1215
  98.    End
  99.    Begin VB.Menu mnuB 
  100.       Caption         =   "Actions"
  101.       Begin VB.Menu mnuBInsertErrC 
  102.          Caption         =   "Insert Err MsgBox"
  103.          Index           =   0
  104.       End
  105.       Begin VB.Menu mnuBInsertErrC 
  106.          Caption         =   "Insert Err.Raise"
  107.          Index           =   1
  108.       End
  109.       Begin VB.Menu mnuBInsertErrC 
  110.          Caption         =   "Insert Err.Raise MTS"
  111.          Index           =   2
  112.       End
  113.       Begin VB.Menu mnuInsertErrConst 
  114.          Caption         =   "Insert ErrConst for Member"
  115.       End
  116.    End
  117.    Begin VB.Menu mnuO 
  118.       Caption         =   "Options"
  119.       Begin VB.Menu mnuOptResumeNextExit 
  120.          Caption         =   "MsgResumeNextExit"
  121.       End
  122.       Begin VB.Menu mnuOptSetAbort 
  123.          Caption         =   "Set Abort"
  124.          Checked         =   -1  'True
  125.       End
  126.       Begin VB.Menu mnuOptSetComplete 
  127.          Caption         =   "Set Complete"
  128.          Checked         =   -1  'True
  129.       End
  130.       Begin VB.Menu mnuDelOthers 
  131.          Caption         =   "Delete other ErrHandlers"
  132.       End
  133.       Begin VB.Menu mnuOptStatus 
  134.          Caption         =   "gStatus"
  135.          Checked         =   -1  'True
  136.       End
  137.    End
  138.    Begin VB.Menu mnuInfo 
  139.       Caption         =   "Info"
  140.    End
  141. Attribute VB_Name = "frmAddIn"
  142. Attribute VB_GlobalNameSpace = False
  143. Attribute VB_Creatable = False
  144. Attribute VB_PredeclaredId = True
  145. Attribute VB_Exposed = False
  146. ' Code for frmAddin (form)
  147. ' By J.M.Goebel
  148. ' This Code is Freeware if you use this code to develop new Application
  149. ' it may only be distributed as Freeware!
  150. ' just paste this code into frmAddin after you created a new AddIn-Project
  151. ' when you start the program with full compile you will see which controls
  152. ' are missing.
  153. ' Controls starting with mnu... are Menus
  154. ' Controls starting with txt... are TextBoxes
  155. ' Controls starting with chk... are checkboxes
  156. ' all textboxes must be multiline!
  157. ' you have to paste the code of modErrHandling into txtModErrHanlding
  158. ' you can also edit the file of frmAddin and replace the part before the code
  159. ' with this (remove the ' before each line before) Ther will be an error because
  160. ' of the missing frx-file but you only have to paste the content of modErrHandling
  161. ' into the text of txtModErrHandling :
  162. 'Version 5#
  163. 'Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
  164. 'Begin VB.Form frmAddIn
  165. '   BorderStyle = 3        'Fester Dialog
  166. '   Caption = "Code Completer"
  167. '   ClientHeight = 3600
  168. '   ClientLeft = 2175
  169. '   ClientTop = 2220
  170. '   ClientWidth = 6030
  171. '   LinkTopic = "Form1"
  172. '   MaxButton = 0           'False
  173. '   MinButton = 0           'False
  174. '   ScaleHeight = 3600
  175. '   ScaleWidth = 6030
  176. '   ShowInTaskbar = 0       'False
  177. '   StartUpPosition = 2    'Bildschirmmitte
  178. '   Begin VB.CheckBox chkBottom
  179. '      Caption = "Bottom"
  180. '      Height = 375
  181. '      Left = 3960
  182. '      TabIndex = 8
  183. '      Top = 420
  184. '      Width = 795
  185. '   End
  186. '   Begin VB.CheckBox chkTop
  187. '      Caption = "Top"
  188. '      Height = 375
  189. '      Left = 3960
  190. '      TabIndex = 7
  191. '      Top = 0
  192. '      Width = 795
  193. '   End
  194. '   Begin VB.TextBox txtModErrHandling
  195. '      Height = 555
  196. '      Left = 0
  197. '      MultiLine = -1          'True
  198. '      TabIndex = 6
  199. '      Text            =   "frmAddIn.frx":0000
  200. '      Top = 3000
  201. '      Width = 6015
  202. '   End
  203. '   Begin VB.TextBox txtBottom
  204. '      Height = 1035
  205. '      Left = 3960
  206. '      MultiLine = -1          'True
  207. '      TabIndex = 5
  208. '      Text            =   "frmAddIn.frx":0293
  209. '      Top = 1920
  210. '      Width = 2055
  211. '   End
  212. '   Begin VB.TextBox txtTop
  213. '      Height = 1035
  214. '      Left = 3960
  215. '      MultiLine = -1          'True
  216. '      TabIndex = 4
  217. '      Text            =   "frmAddIn.frx":0299
  218. '      Top = 840
  219. '      Width = 2055
  220. '   End
  221. '   Begin VB.TextBox txtCode
  222. '      Height = 2955
  223. '      Left = 1800
  224. '      MultiLine = -1          'True
  225. '      TabIndex = 3
  226. '      Text            =   "frmAddIn.frx":029F
  227. '      Top = 0
  228. '      Width = 2115
  229. '   End
  230. '   Begin MSComctlLib.TreeView tvComponents
  231. '      Height = 2955
  232. '      Left = 0
  233. '      TabIndex = 2
  234. '      Top = 0
  235. '      Width = 1755
  236. '      _ExtentX        =   3096
  237. '      _ExtentY        =   5212
  238. '      _Version        =   393217
  239. '      Indentation = 584
  240. '      Style = 7
  241. '      Checkboxes = -1         'True
  242. '      Appearance = 1
  243. '   End
  244. '   Begin VB.CommandButton CancelButton
  245. '      Caption = "&Abbrechen"
  246. '      Height = 375
  247. '      Left = 4800
  248. '      TabIndex = 1
  249. '      Top = 420
  250. '      Width = 1215
  251. '   End
  252. '   Begin VB.CommandButton OKButton
  253. '      Caption = "&OK"
  254. '      Height = 375
  255. '      Left = 4800
  256. '      TabIndex = 0
  257. '      Top = 0
  258. '      Width = 1215
  259. '   End
  260. '   Begin VB.Menu mnuB
  261. '      Caption = "Bearbeiten"
  262. '      Begin VB.Menu mnuBInsertErrC
  263. '         Caption = "Insert Err MsgBox"
  264. '         Index = 0
  265. '      End
  266. '      Begin VB.Menu mnuBInsertErrC
  267. '         Caption = "Insert Err.Raise"
  268. '         Index = 1
  269. '      End
  270. '      Begin VB.Menu mnuBInsertErrC
  271. '         Caption = "Insert Err.Raise MTS"
  272. '         Index = 2
  273. '      End
  274. '      Begin VB.Menu mnuInsertErrConst
  275. '         Caption = "Insert ErrConst for Member"
  276. '      End
  277. '   End
  278. '   Begin VB.Menu mnuO
  279. '      Caption = "Optionen"
  280. '      Begin VB.Menu mnuOptResumeNextExit
  281. '         Caption = "MsgResumeNextExit"
  282. '      End
  283. '      Begin VB.Menu mnuOptSetAbort
  284. '         Caption = "Set Abort"
  285. '      End
  286. '      Begin VB.Menu mnuOptSetComplete
  287. '         Caption = "Set Complete"
  288. '      End
  289. '      Begin VB.Menu mnuOptStatus
  290. '         Caption = "gStatus"
  291. '      End
  292. '   End
  293. '   Begin VB.Menu mnuInfo
  294. '      Caption = "Info"
  295. '   End
  296. 'Attribute VB_Name = "frmAddIn"
  297. 'Attribute VB_GlobalNameSpace = False
  298. 'Attribute VB_Creatable = False
  299. 'Attribute VB_PredeclaredId = True
  300. 'Attribute VB_Exposed = False
  301. Public VBInstance As VBIDE.VBE
  302. Public Connect As Connect
  303. Option Explicit
  304. Private Enum ErrTypes
  305.   errTMsgBox
  306.   errTRaise
  307.   errTRaiseWithSetAbort
  308. End Enum
  309. Private Type MemberProps
  310.   Top As Long
  311.   Body As Long
  312.   Lines As Long
  313.   TopGet As Long
  314.   BodyGet As Long
  315.   LinesGet As Long
  316.   TopSet As Long
  317.   BodySet As Long
  318.   LinesSet As Long
  319.   Type As String
  320.   Code As CodeModule
  321.   ParentName As String
  322. End Type
  323. Private mRightClickedMember As Member
  324. Public Sub LoadComponents()
  325. Dim Projekt As VBProject
  326. Dim Comp As VBComponent
  327. Dim newNode As Node
  328. Dim ChildNode As Node
  329. Dim Member As Member
  330. On Error GoTo LoadErr
  331. Set Projekt = VBInstance.ActiveVBProject
  332. gStatus = "LoadComponents"
  333. Me.Caption = Connect.VBInstance.ActiveVBProject.Name
  334. gStatus = "Getting Components"
  335. tvComponents.Nodes.Clear
  336. Set newNode = tvComponents.Nodes.Add(, tvwFirst, "Root", "-")
  337. For Each Comp In Projekt.VBComponents
  338.   On Error Resume Next
  339.   If Comp.CodeModule Is Nothing Then Debug.Print "Null"
  340.   If Err.Number = 0 Then
  341.     On Error GoTo LoadErr
  342.     If Comp.CodeModule Is Nothing = False Then
  343.       Set newNode = tvComponents.Nodes.Add(newNode.Index, tvwNext, _
  344.         , Comp.Name)
  345.       
  346.       For Each Member In Comp.CodeModule.Members
  347.         If Member.Type = vbext_mt_Method _
  348.           Or Member.Type = vbext_mt_Property Then
  349.           Set ChildNode = tvComponents.Nodes.Add _
  350.             (newNode.Index, tvwChild, , Member.Name)
  351.           Set ChildNode.Tag = Member
  352.         End If
  353.       Next Member
  354.     End If
  355.   End If
  356. Next Comp
  357. Exit Sub
  358. LoadErr:
  359. MsgBox Err.Description
  360. End Sub
  361. Private Sub CancelButton_Click()
  362.     Connect.Hide
  363. End Sub
  364. Private Sub Check1_Click()
  365. End Sub
  366. Private Sub lstProcedures_Click()
  367. End Sub
  368. Private Sub mnuBInsertErrC_Click(Index As Integer)
  369. Dim Member As Member
  370. Dim object As Object
  371. Dim Code As CodeModule
  372. Dim Start As Long
  373. Dim BodyStart As Long
  374. Dim Lines As Long
  375. Dim Node As Node
  376. Dim DeleteOld As Boolean
  377. On Error GoTo ErrHandler
  378. For Each Node In tvComponents.Nodes
  379.   If Node.Checked Then
  380.     GoSub StartInsert
  381.   End If
  382. Next Node
  383. Exit Sub
  384. StartInsert:
  385. If IsNull(Node.Tag) = False Then
  386.   If IsObject(Node.Tag) Then
  387.     Set object = Node.Tag
  388.     If TypeOf object Is Member Then
  389.       Set Member = Node.Tag
  390.       
  391.       InsertErrorCode Member, Index
  392.     End If
  393.   End If
  394. End If
  395. Return
  396. ErrHandler:
  397. Error_Checker:
  398.    Dim pstrError As String
  399.    With Err
  400.      pstrError = .Source & " caused Error #" & _
  401.     .Number & " during operation " & .Description & vbCrLf & "Click Help to See Topic " & .HelpContext & " in the file " & .HelpFile & "."
  402.      MsgBox pstrError, vbMsgBoxHelpButton, _
  403.      "Error: " & .Description, .HelpFile, .HelpContext
  404.      .Clear
  405.    End With
  406. End Sub
  407. Private Sub mnuDelOthers_Click()
  408.  mnuDelOthers.Checked = mnuDelOthers.Checked Xor True
  409. End Sub
  410. Private Sub mnuInfo_Click()
  411. Dim msg As String
  412. msg = msg + "Code Completer by J.M.Goebel" + vbCrLf
  413. msg = msg + "E-Mail: HMGoebel@diatel-direkt.de + hmg65@dialup.nacamar.de + jgoebel@stud.uni-frankfurt.de" + vbCrLf
  414. msg = msg + "Version " & App.Major & "." & App.Minor & "." & App.Revision & vbCrLf
  415. msg = msg + "This is a Beta Version! No warranties whatsoever"
  416. MsgBox msg
  417. End Sub
  418. Private Sub mnuInsertErrConst_Click()
  419.   If mRightClickedMember Is Nothing = False Then
  420.     Call InsertNextErrorConstant(mRightClickedMember)
  421.     Set mRightClickedMember = Nothing
  422.   End If
  423. End Sub
  424. Private Sub mnuOptgStatus_Click()
  425. End Sub
  426. Private Sub mnuOptResumeNextExit_Click()
  427.   mnuOptResumeNextExit.Checked = mnuOptResumeNextExit.Checked Xor True
  428. End Sub
  429. Private Sub mnuOptSetAbort_Click()
  430.     mnuOptSetAbort.Checked = mnuOptSetAbort.Checked Xor True
  431. End Sub
  432. Private Sub mnuOptSetComplete_Click()
  433.   mnuOptSetComplete.Checked = mnuOptSetComplete.Checked Xor True
  434. End Sub
  435. Private Sub mnuOptStatus_Click()
  436.     mnuOptStatus.Checked = mnuOptStatus.Checked Xor True
  437. End Sub
  438. Private Sub OKButton_Click()
  439.     MsgBox "AddIn operation on: " & VBInstance.FullName
  440. End Sub
  441. Private Sub ClearTExt()
  442.   txtCode.Text = ""
  443.   txtTop = ""
  444.   txtBottom = ""
  445. End Sub
  446. Private Sub tvComponents_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  447. Dim Node As Node
  448. Dim object As Object
  449. Dim Member As Member
  450. If Button <> vbRightButton Then Exit Sub
  451. Set Node = tvComponents.HitTest(x, y)
  452. If Node Is Nothing Then Exit Sub
  453. If IsNull(Node.Tag) = False Then
  454.   If IsObject(Node.Tag) Then
  455.     Set object = Node.Tag
  456.     If TypeOf object Is Member Then
  457.       Set Member = Node.Tag
  458.       Set mRightClickedMember = Member
  459.       PopupMenu mnuB
  460.     End If
  461.   End If
  462. End If
  463. End Sub
  464. Private Sub tvComponents_NodeClick(ByVal Node As MSComctlLib.Node)
  465. Dim Member As Member
  466. Dim object As Object
  467. Dim Code As CodeModule
  468. Dim Start As Long
  469. Dim BodyStart As Long
  470. Dim Lines As Long
  471. Dim n As Node
  472. On Error Resume Next
  473. ClearTExt
  474. If IsNull(Node.Tag) = False Then
  475.   If IsObject(Node.Tag) Then
  476.     Set object = Node.Tag
  477.     If TypeOf object Is Member Then
  478.       Set Member = Node.Tag
  479.       Set Code = Member.Collection.Parent
  480.       If Member.Type = vbext_mt_Method Then
  481.         'start = member.CodeLocation
  482.         Start = Code.ProcStartLine(Member.Name, vbext_pk_Proc)
  483.         Lines = Code.ProcCountLines(Member.Name, vbext_pk_Proc)
  484.         BodyStart = Code.ProcBodyLine(Member.Name, vbext_pk_Proc)
  485.       ElseIf Member.Type = vbext_mt_Property Then
  486.         Start = Code.ProcStartLine(Member.Name, vbext_pk_Let)
  487.         If Start = 0 Then Exit Sub
  488.         Lines = Code.ProcCountLines(Member.Name, vbext_pk_Let)
  489.         BodyStart = Code.ProcBodyLine(Member.Name, vbext_pk_Let)
  490.       End If
  491.       txtCode.Text = Code.Lines(Start, Lines)
  492.       txtTop = Code.Lines(BodyStart, 1)
  493.       txtBottom = Code.Lines(Start + Lines - 2, 2)
  494.     End If
  495.   End If
  496.   If Not Node.Child Is Nothing Then
  497.     Set n = Node.Child
  498.     While Not n Is Nothing
  499.       n.Checked = Node.Checked
  500.       Set n = n.Next
  501.     Wend
  502.   End If
  503. End If
  504. End Sub
  505. Private Function FindErrorModule() As VBComponent
  506. Dim Pr As VBProject
  507. Dim Comp As VBComponent
  508. Set Pr = VBInstance.ActiveVBProject
  509. On Error Resume Next
  510. Set Comp = Pr.VBComponents("modErrorHandling")
  511. On Error GoTo 0
  512. If Comp Is Nothing Then
  513.   Set Comp = Pr.VBComponents.Add(vbext_ct_StdModule)
  514.   Comp.Name = "modErrorHandling"
  515.   Comp.CodeModule.InsertLines 1, txtModErrHandling
  516. End If
  517. Set FindErrorModule = Comp
  518. End Function
  519. Private Function InsertNextErrorConstant(Mmb As Member) As String
  520. Dim Pr As VBProject
  521. Dim ErrComp As VBComponent
  522. Dim ErrConstName As String
  523. Dim AllComponentErrorOffset As Long
  524. Dim ThisComponentErrorOffset As Long
  525. Dim MemberErrorNumber As Long
  526. Dim MemberErrorConstName As String ' Constante f
  527. r ErrorNummer des Members
  528. Dim CompErrConstName As String 'Constante f
  529. r Error Offset der Komponente
  530. Const AllErrConstName = "ComponentErrorOffset"
  531. Dim mbrErrConstOfMember As Member 'Die Constante die den Error f
  532. r das Member enth
  533. Dim mbrErrConstOffsetComponent As Member
  534. Dim mbrErrConstOffsetAll As Member
  535. Dim LineInsert As Long
  536. Set Pr = Mmb.VBE.ActiveVBProject
  537. Set ErrComp = FindErrorModule
  538. MemberErrorConstName = "Err" & EraseSpaces(Mmb.Collection.Parent.Parent.Name) & "_" & EraseSpaces(Mmb.Name)
  539. On Error Resume Next
  540. Set mbrErrConstOfMember = ErrComp.CodeModule.Members(MemberErrorConstName)
  541. If Err.Number <> 0 Then
  542.   Err.Clear
  543.   CompErrConstName = "ErrOffs" & Mmb.Collection.Parent.Parent.Name
  544.   Set mbrErrConstOffsetComponent = ErrComp.CodeModule.Members(CompErrConstName)
  545.   If Err.Number <> 0 Then
  546.     Err.Clear
  547.     Set mbrErrConstOffsetAll = ErrComp.CodeModule.Members(AllErrConstName)
  548.     If Err.Number <> 0 Then
  549.       Err.Clear
  550.       On Error GoTo 0
  551.       Err.Raise vbObjectError, "InsertNextErrorConstant", "ComponentErrorOffset not found!"
  552.     End If
  553.     AllComponentErrorOffset = Val(GetValueOfConstant(mbrErrConstOffsetAll))
  554.     LineInsert = mbrErrConstOffsetAll.CodeLocation
  555.     ThisComponentErrorOffset = AllComponentErrorOffset + 100
  556.     ' Neuen AllComponents ErrorOffset reinschreiben
  557.     Call ErrComp.CodeModule.ReplaceLine(LineInsert, "Public Const " & AllErrConstName _
  558.       & " = " & ThisComponentErrorOffset)
  559.     ' Neuen ThisComponentErrorOffset erzeugen
  560.     LineInsert = LineInsert + 1
  561.     ErrComp.CodeModule.InsertLines LineInsert, "' Fehler Konstanten f
  562. r Modul " & Mmb.Collection.Parent.Parent.Name
  563.     LineInsert = LineInsert + 1
  564.     ErrComp.CodeModule.InsertLines LineInsert, "Public Const " _
  565.       & CompErrConstName & " = " & ThisComponentErrorOffset
  566.   Else
  567.     ThisComponentErrorOffset = GetValueOfConstant(mbrErrConstOffsetComponent)
  568.     ThisComponentErrorOffset = ThisComponentErrorOffset + 1
  569.     LineInsert = mbrErrConstOffsetComponent.CodeLocation
  570.     ' ThisComponentError Offset updaten
  571.     Call ErrComp.CodeModule.ReplaceLine(LineInsert, "Public Const " & CompErrConstName _
  572.       & " = " & ThisComponentErrorOffset)
  573.   End If
  574.   MemberErrorNumber = ThisComponentErrorOffset
  575.   ' neue MemberErrorConstante reinschreiben
  576.   LineInsert = LineInsert + 1
  577.   ErrComp.CodeModule.InsertLines LineInsert, "Public Const " _
  578.       & MemberErrorConstName & " = " & ThisComponentErrorOffset & " + vbObjectError"
  579. End If
  580. InsertNextErrorConstant = MemberErrorConstName
  581. End Function
  582. Private Function GetValueOfConstant(mbrConst As Member) As Variant
  583. Dim CodeLocation As Long
  584. Dim strCode As String
  585. Dim Value As String
  586. CodeLocation = mbrConst.CodeLocation
  587. strCode = mbrConst.Collection.Parent.Lines(CodeLocation, 1)
  588. Value = Mid(strCode, InStr(1, strCode, " = ") + 3, Len(strCode))
  589. GetValueOfConstant = Value
  590. End Function
  591. Private Function AnalyseMember(Member As Member) As MemberProps
  592. Dim object As Object
  593. Dim Code As CodeModule
  594. Dim Start As Long
  595. Dim BodyStart As Long
  596. Dim Lines As Long
  597. On Error Resume Next
  598.     If Member Is Nothing = False Then
  599.       Set Code = Member.Collection.Parent
  600.       If Member.Type = vbext_mt_Method Then
  601.         'start = member.CodeLocation
  602.         Start = Code.ProcStartLine(Member.Name, vbext_pk_Proc)
  603.         Lines = Code.ProcCountLines(Member.Name, vbext_pk_Proc)
  604.         BodyStart = Code.ProcBodyLine(Member.Name, vbext_pk_Proc)
  605.         If InStr(1, Code.Lines(BodyStart, 1), "Function ") > 0 Then
  606.           AnalyseMember.Type = "Function"
  607.         ElseIf InStr(1, Code.Lines(BodyStart, 1), "Sub ") > 0 Then
  608.           AnalyseMember.Type = "Sub"
  609.         End If
  610.       ElseIf Member.Type = vbext_mt_Property Then
  611. getLet:
  612.         Start = Code.ProcStartLine(Member.Name, vbext_pk_Let)
  613.         If Err.Number <> 0 Then GoTo getGet
  614.         Lines = Code.ProcCountLines(Member.Name, vbext_pk_Let)
  615.         BodyStart = Code.ProcBodyLine(Member.Name, vbext_pk_Let)
  616. getGet:
  617.         AnalyseMember.TopGet = Code.ProcStartLine(Member.Name, vbext_pk_Get)
  618.         If Err.Number <> 0 Then GoTo getSet
  619.         AnalyseMember.LinesGet = Code.ProcCountLines(Member.Name, vbext_pk_Get)
  620.         AnalyseMember.BodyGet = Code.ProcBodyLine(Member.Name, vbext_pk_Get)
  621. getSet:
  622.         AnalyseMember.TopSet = Code.ProcStartLine(Member.Name, vbext_pk_Set)
  623.         If Err.Number <> 0 Then GoTo endGet
  624.         AnalyseMember.LinesSet = Code.ProcCountLines(Member.Name, vbext_pk_Set)
  625.         AnalyseMember.BodySet = Code.ProcBodyLine(Member.Name, vbext_pk_Set)
  626. endGet:
  627.         
  628.         AnalyseMember.Type = "Property"
  629.       End If
  630.       If Lines > 0 Then
  631.         AnalyseMember.Body = BodyStart
  632.         AnalyseMember.Lines = Lines
  633.         AnalyseMember.Top = Start
  634.         Set AnalyseMember.Code = Code
  635.         AnalyseMember.ParentName = Member.Collection.Parent.Parent.Name
  636.       End If
  637.       
  638.     End If
  639. End Function
  640. Private Sub InsertErrorCode(Member As Member, ByVal ErrType As ErrTypes)
  641. Dim Props As MemberProps
  642. Dim Name As String
  643. Dim i As Long
  644. Dim iCountDim As Long
  645. Dim iStart As Long
  646. Dim CodeFound As Boolean
  647. Dim f1%, f2%
  648. Dim Einrueck&
  649. Dim OldErrHandlerFound!, DeleteOld!
  650. Dim Loops As Integer
  651. Dim strInsert As String
  652. Dim ErrConstName As String
  653. Dim ProcKind As vbext_ProcKind
  654. Dim OtherErrHandler As String
  655. Dim DeleteOther As Boolean
  656. Dim strTmp As String
  657. Props = AnalyseMember(Member)
  658. ' Erste CodeZeile finden
  659. If Props.Type = "Property" Then
  660.     Loops = 2
  661. End If
  662. ' Bei Properties muss man unterscheiden zwischen Get, Set und Let
  663.   OtherErrHandler = "xyz"
  664.   ProcKind = vbext_pk_Proc
  665.   If Props.Type = "Property" Then
  666.     ProcKind = vbext_pk_Let
  667.     While Props.Lines = 0
  668.       Props = AnalyseMember(Member)
  669.       If Loops = 2 Then
  670.         ProcKind = vbext_pk_Get
  671.         Props.Lines = Props.LinesGet
  672.         Props.Body = Props.BodyGet
  673.         Props.Top = Props.TopGet
  674.         Loops = 1
  675.       ElseIf Loops = 1 Then
  676.         ProcKind = vbext_pk_Set
  677.         Props.Lines = Props.LinesSet
  678.         Props.Body = Props.BodySet
  679.         Props.Top = Props.TopSet
  680.         Loops = 0
  681.       Else
  682.         Exit Do
  683.       End If
  684.     Wend
  685.   End If
  686.   With Props
  687.     ' Find beginning of code For Properties you need to differ between Let, Get and Set
  688.     For i = .Body To .Top + .Lines
  689.       If InStr(1, .Code.Lines(i, 1), .Type _
  690.         + IIf(ProcKind = vbext_pk_Get, " Get", "") _
  691.         + IIf(ProcKind = vbext_pk_Let, " Let", "") _
  692.         + IIf(ProcKind = vbext_pk_Set, " Set", "") _
  693.         + " " + Member.Name) > 0 Then
  694.         While InStr(1, .Code.Lines(i, 1), "_") = Len(.Code.Lines(i, 1))
  695.           i = i + 1
  696.         Wend
  697.         CodeFound = True
  698.         Exit For
  699.       End If
  700.     Next i
  701.     If CodeFound = False Then Exit Sub
  702.     iStart = i
  703.     While .Top + .Lines - .Body < 5
  704.         .Code.InsertLines iStart + 1, "'"
  705.         .Lines = .Lines + 1
  706.     Wend
  707.     ' Nach bereits vorhandenen ErrorHandlern suchen
  708.     ' Ist ein anderer Error Handler vorhanden wird dieser beibehalten
  709.     ' ein alter xxxErrHandler wird 
  710. berschrieben
  711.     For i = iStart + 1 To .Top + .Lines - 2
  712.       If InStr(1, .Code.Lines(i, 1), "Dim ") > 0 Then iCountDim = iCountDim + 1
  713.       If InStr(1, .Code.Lines(i, 1), "On Error GoTo") > 0 Then
  714.         If InStr(1, .Code.Lines(i, 1), "On Error GoTo 0") > 0 Then
  715.           strTmp = .Code.Lines(i, 1)
  716.           Replace strTmp, "On Error GoTo 0", "On Error Goto xxxErrHandler"
  717.           .Code.DeleteLines i, 1
  718.           .Code.InsertLines i, strTmp
  719.         ElseIf InStr(1, .Code.Lines(i, 1), "On Error GoTo xxxErrHandler") > 0 Then
  720.           OldErrHandlerFound = True
  721.         Else
  722.           ' If you don't select 'Erase other ErrHandlers' the sub will exit
  723.           If mnuDelOthers.Checked Then
  724.             If Not Left$(.Code.Lines(i, 1), 2) = "' " Then
  725.               OtherErrHandler = .Code.Lines(i, 1)
  726.               .Code.DeleteLines i, 1
  727.               .Code.InsertLines i, "' " + OtherErrHandler
  728.               OtherErrHandler = Right$(OtherErrHandler, Len(OtherErrHandler) _
  729.                - (InStr(1, OtherErrHandler, "On Error") + 14))
  730.             End If
  731.           ElseIf i < iStart + 5 + iCountDim Then
  732.             Exit Sub
  733.           End If
  734.         End If
  735.       End If
  736.       
  737.     Next i
  738.     ' Nach alten Status Infos suchen und diese l
  739. schen
  740.     i = iStart + 1
  741.     Do
  742.       If i > .Top + .Lines - 5 Then Exit Do
  743.       While InStr(1, .Code.Lines(i, 1), "gstatus = """ & .ParentName & "." & Member.Name & " Line", vbTextCompare) > 0
  744.         .Code.DeleteLines i, 1
  745.         .Lines = .Lines - 1
  746.         
  747.       Wend
  748.       ' Bei Exit h
  749. rt der Spass auf
  750.       If InStr(1, .Code.Lines(i, 1), "Exit " & .Type) = 1 Then Exit Do
  751.       
  752.       If (i - iStart) Mod 10 = 0 Then
  753.         ' N
  754. chsten Zeilenanfang suchen
  755.         While Right(.Code.Lines(i - 1, 1), 1) = "_"
  756.            i = i + 1
  757.            If i > .Lines - 6 Then Exit Do
  758.            If InStr(1, .Code.Lines(i, 1), "Exit " & .Type) = 1 Then Exit Do
  759.         Wend
  760.         ' Einr
  761. ckung bestimmen
  762.         Einrueck = Len(.Code.Lines(i - 1, 1)) - Len(LTrim(.Code.Lines(i - 1, 1)))
  763.         ' Neues Status-Info einf
  764. gen aber nur wenn Option gesetzt
  765.         If Right(.Code.Lines(i - 1, 1), 1) <> "_" And mnuOptStatus.Checked Then
  766.           .Code.InsertLines i, Space(Einrueck) + "gstatus = """ & .ParentName & "." & Member.Name & " Line " & i & """" & " ' Inserted by CodeCompleter"
  767.           .Lines = .Lines + 1
  768.           i = i + 1
  769.         End If
  770.       End If
  771.       i = i + 1
  772.     Loop
  773.     ' Alte ErrHandler l
  774. schen
  775.     For i = iStart + 1 To .Top + .Lines
  776.       If InStr(1, .Code.Lines(i, 1), "End " + .Type) > 0 Then
  777.         CodeFound = True
  778.         Exit For
  779.       ElseIf InStr(1, .Code.Lines(i, 1), "xxxErrHandler:") > 0 Then
  780.         DeleteOld = True
  781.         .Code.DeleteLines i
  782.         .Code.DeleteLines i - 1 ' Exit ...
  783.         If .Code.Lines(i - 2, 1) = "GetObjectContext.SetComplete" Then
  784.           .Code.DeleteLines i - 2
  785.           .Lines = .Lines - 1
  786.           i = i - 1
  787.         End If
  788.         .Lines = .Lines - 2
  789.         i = i - 2
  790.       ElseIf InStr(1, .Code.Lines(i, 1), OtherErrHandler + ":") > 0 Then
  791.         DeleteOther = True
  792.         OtherErrHandler = "' " + .Code.Lines(i, 1)
  793.         .Code.DeleteLines i, 1
  794.         .Code.InsertLines i, OtherErrHandler
  795.       ElseIf DeleteOld Then
  796.         .Code.DeleteLines i
  797.         .Lines = .Lines - 1
  798.         i = i - 1
  799.       ElseIf DeleteOther Then
  800.         OtherErrHandler = "' " + .Code.Lines(i, 1)
  801.         .Code.DeleteLines i, 1
  802.         .Code.InsertLines i, OtherErrHandler
  803.       End If
  804.       
  805.     Next i
  806.     If CodeFound = False Then MsgBox "InsertErrorCode: End not found!": Exit Sub
  807.     ' Neuen ErrHandler einf
  808.     If OldErrHandlerFound = False Then
  809.       Call .Code.InsertLines(iStart + 1, "On Error Goto xxxErrHandler" + vbCrLf + _
  810.         "gstatus = """ & .ParentName & "." & Member.Name & " Start""")
  811.       .Lines = .Lines + 2
  812.       i = i + 2
  813.     End If
  814.     ' Den ausgew
  815. hlten ErrHandler einf
  816.     If ErrType = errTMsgBox Then ' Message Box einf
  817. gen (nur f
  818. r Anwendungen!)
  819.         strInsert = "Exit " & .Type & vbCrLf & "xxxErrHandler: " + vbCrLf _
  820.         + "Dim xxxErrText as string" + vbCrLf _
  821.         + "xxxErrText = ""Status: "" & gstatus & vbcrlf & ""Fehler in " & .ParentName & "." & Member.Name & """ & vbcrlf & Err.Description & vbcrlf & err.number & vbcrlf & err.Source" _
  822.         If mnuOptResumeNextExit.Checked Then ' Message Box mit Resume Next Exit
  823.           strInsert = strInsert + _
  824.             vbCrLf + "Select Case msgBox " _
  825.             + "(xxxErrText, vbCritical + vbAbortRetryIgnore, " _
  826.             + """Fehler! in Programmversion "" & App.Major & ""."" & App.Minor & ""."" & App.Revision)" _
  827.             + ": Case vbRetry: gstatus = ""xxxResume"" : Resume: " _
  828.             + "Case vbIgnore: gstatus = ""xxxResumeNext"" : Resume Next: End Select "
  829.         Else ' Message Box nur mit OK
  830.           strInsert = strInsert + _
  831.             vbCrLf + "call msgBox (xxxErrText, vbCritical , " _
  832.             + """Fehler! in Programmversion "" & App.Major & ""."" & App.Minor & ""."" & App.Revision)"
  833.         End If
  834.         strInsert = strInsert + vbCrLf _
  835.           + "Call LogError(Err.Number, Err.Description, Err.Source, gStatus, """ & .ParentName & "." & Member.Name & """)"
  836.         .Code.InsertLines i, strInsert
  837.     ElseIf ErrType = errTRaise Then ' Raise Error f
  838. r normale ActiveX Komponenten
  839.         ErrConstName = InsertNextErrorConstant(Member)
  840.         .Code.InsertLines i, "Exit " & .Type & vbCrLf & "xxxErrHandler: " + vbCrLf _
  841.         + "Dim xxxErrText as string" + vbCrLf _
  842.         + "xxxErrText = ""Status: "" & gstatus & "" //Fehler in " & .ParentName & "." & Member.Name & """ & "": "" & err.number & "", "" & Err.Description & "", "" & err.Source" _
  843.         + vbCrLf + "Call LogError(Err.Number, Err.Description, Err.Source, gStatus, """ & .ParentName & "." & Member.Name & """) " _
  844.         + vbCrLf + "gstatus = ""xxxErrHandler in " & .ParentName & "." & Member.Name & """" _
  845.         + vbCrLf + "Call RaiseError(" + ErrConstName + ", xxxErrText, App.ExeName & "": "" & App.Major & ""."" & App.Minor & ""."" & App.Revision) "
  846.     ElseIf ErrType = errTRaiseWithSetAbort Then ' Raise Error f
  847. r MTS-Komponenten
  848.         ErrConstName = InsertNextErrorConstant(Member)
  849.         If mnuOptSetComplete.Checked Then ' Set Complete einf
  850.           strInsert = strInsert + "GetObjectContext.SetComplete" + vbCrLf
  851.         End If
  852.         strInsert = strInsert + "Exit " & .Type & vbCrLf & "xxxErrHandler: " + vbCrLf _
  853.         + "Dim xxxErrText as string" + vbCrLf
  854.         If mnuOptSetAbort Then ' Set Abort einf
  855.           strInsert = strInsert + "GetObjectContext.SetAbort" + vbCrLf
  856.         End If
  857.         strInsert = strInsert + "xxxErrText = ""Status: "" & gstatus & "" //Fehler in " & .ParentName & "." & Member.Name & """ & "": "" & err.number & "", "" & Err.Description & "", "" & err.Source" _
  858.         + vbCrLf + "Call LogError(Err.Number, Err.Description, Err.Source, gStatus, """ & .ParentName & "." & Member.Name & """) " _
  859.         + vbCrLf + "gstatus = ""xxxErrHandler in " & .ParentName & "." & Member.Name & """" _
  860.         + vbCrLf + "Call RaiseError(" + ErrConstName + ", xxxErrText, App.ExeName & "": "" & App.Major & ""."" & App.Minor & ""."" & App.Revision) "
  861.         .Code.InsertLines i, strInsert
  862.     End If
  863.   End With
  864.   Props.Lines = 0
  865.   Props.Body = 0
  866.   Props.Top = 0
  867.   DeleteOld = False
  868.   DeleteOther = False
  869.   strInsert = ""
  870.   CodeFound = False
  871.   OtherErrHandler = ""
  872. Loop Until Loops = 0
  873. End Sub
  874. Private Function getspaces(varString As String)
  875. End Function
  876.